#pragma once
#include "CGIPrefix.h"
namespace Alice
{
    class CGIBuffer;
    class CGIViewport;
    class CGITexture;
    struct CGIRenderPassInfo;
    class CGIGraphicsPipelineState;
    class ICGIComputeContext
    {
    public:
        virtual ~ICGIComputeContext()
        {
        }
        virtual ICGIComputeContext& GetLowestLevelContext() { return *this; }
    };
    class ICGICommandContext : public ICGIComputeContext
    {
    public:
        virtual ~ICGICommandContext()
        {
        }
        virtual void RHIBeginDrawingViewport(CGIViewport* inViewport, CGITexture* inCGITexture) = 0;
        virtual void RHIEndDrawingViewport(CGIViewport* Viewport, bool bPresent, bool bLockToVsync) = 0;
        virtual void RHIBeginRenderPass(const CGIRenderPassInfo* InInfo, const TCHAR* InName) = 0;
        virtual void RHIEndRenderPass() = 0;
        virtual void RHISetStreamSource(uint32 StreamIndex, CGIBuffer* VertexBuffer, uint32 Offset) = 0;
        virtual void RHISetGraphicsPipelineState(CGIGraphicsPipelineState* GraphicsState, uint32 StencilRef, bool bApplyAdditionalState) = 0;
        virtual void RHIDrawPrimitive(uint32 BaseVertexIndex, uint32 NumPrimitives, uint32 NumInstances) = 0;
    };
    
}
